<template>
  <!-- 这是一个不可见的组件，仅用于处理 Jenkins MCP 服务调用 -->
</template>

<script>
export default {
  name: 'JenkinsMcpTrigger',
  mounted() {
    // 监听触发 Jenkins 构建的事件
    window.addEventListener('triggerJenkinsViaBrowser', this.handleTriggerJenkins);
  },
  beforeUnmount() {
    // 组件卸载时移除事件监听
    window.removeEventListener('triggerJenkinsViaBrowser', this.handleTriggerJenkins);
  },
  methods: {
    /**
     * 处理触发 Jenkins 构建的事件
     * @param {CustomEvent} event - 触发事件对象
     */
    async handleTriggerJenkins(event) {
      try {
        const { url, jobName } = event.detail;
        console.log(`🔧 准备通过 Chrome MCP 服务打开 Jenkins 页面: ${url}`);
        
        // 检查是否在浏览器环境中且有 MCP 服务
        if (typeof window !== 'undefined' && window.runMcp) {
          // 使用 MCP 服务打开 Jenkins 页面
          await this.openJenkinsPageWithMcp(url);
          
          // 等待页面加载完成
          await new Promise(resolve => setTimeout(resolve, 3000));
          
          // 点击 Build Now 按钮
          await this.clickBuildNowButton();
          
          console.log(`✅ 已成功使用 Chrome MCP 服务触发 Jenkins 构建: ${jobName}`);
        } else {
          // 如果没有 MCP 服务，尝试直接打开页面
          window.open(url, '_blank');
          console.log('🔗 已打开 Jenkins 页面，请手动点击 Build Now 按钮');
        }
      } catch (error) {
        console.error('❌ 处理 Jenkins 构建触发时出错:', error.message);
      }
    },
    
    /**
     * 使用 MCP 服务打开 Jenkins 页面
     * @param {string} url - Jenkins 页面 URL
     */
    async openJenkinsPageWithMcp(url) {
      try {
        // 使用 Chrome MCP 服务导航到 Jenkins 页面
        await window.runMcp({
          server_name: 'mcp.config.usrlocalmcp.chrome-mcp-server',
          tool_name: 'chrome_navigate',
          args: {
            url: url,
            newWindow: false
          }
        });
      } catch (error) {
        console.error('❌ 使用 MCP 服务打开 Jenkins 页面时出错:', error.message);
        throw error;
      }
    },
    
    /**
     * 点击 Build Now 按钮
     */
    async clickBuildNowButton() {
      try {
        // 使用 Chrome MCP 服务点击 Build Now 按钮
        // 尝试多种可能的选择器来提高兼容性
        const selectors = [
          'button[name="Submit"]', // 常见的 Build Now 按钮选择器
          'button.build-button',
          '#buildButton',
          '.task-link.build' 
        ];
        
        for (const selector of selectors) {
          try {
            const result = await window.runMcp({
              server_name: 'mcp.config.usrlocalmcp.chrome-mcp-server',
              tool_name: 'chrome_click_element',
              args: {
                selector: selector,
                waitForNavigation: true
              }
            });
            
            if (result && result.success) {
              console.log(`✅ 成功点击了 Build Now 按钮 (选择器: ${selector})`);
              return true;
            }
          } catch (innerError) {
            // 这个选择器失败了，尝试下一个
            console.log(`ℹ️ 选择器 ${selector} 未找到或点击失败，尝试下一个选择器`);
          }
        }
        
        // 如果所有选择器都失败了，尝试查找包含 "Build Now" 文本的按钮
        try {
          // 先获取交互式元素
          const elements = await window.runMcp({
            server_name: 'mcp.config.usrlocalmcp.chrome-mcp-server',
            tool_name: 'chrome_get_interactive_elements',
            args: {
              textQuery: 'Build Now'
            }
          });
          
          if (elements && elements.length > 0) {
            // 点击第一个匹配的元素
            await window.runMcp({
              server_name: 'mcp.config.usrlocalmcp.chrome-mcp-server',
              tool_name: 'chrome_click_element',
              args: {
                coordinates: elements[0].coordinates,
                waitForNavigation: true
              }
            });
            
            console.log('✅ 成功点击了包含 "Build Now" 文本的按钮');
            return true;
          }
        } catch (textSearchError) {
          console.error('❌ 搜索 "Build Now" 按钮时出错:', textSearchError.message);
        }
        
        // 如果所有方法都失败了
        console.warn('⚠️ 未能找到或点击 Build Now 按钮，请手动操作');
        return false;
      } catch (error) {
        console.error('❌ 点击 Build Now 按钮时出错:', error.message);
        throw error;
      }
    }
  }
};
</script>

<style scoped>
/* 这个组件不可见，所以不需要样式 */
</style>